#include <stdio.h>
# define MaxSize 100
typedef int DataType;

typedef struct
{
DataType list[MaxSize];
int size;
} SeqList;

void ListInitiate(SeqList *L)  /*初始化顺序表L*/
{
L ->size = 0; /*定义初始数据元素个数*/
}

int ListLength(SeqList L) /*返回顺序表L的当前数据袁术个数*/
{
return L.size;
}

int ListInsert(SeqList *L, int i, DataType X)
/*在顺序表L的位置i(0 <= i <= size)前插入数据元素值X*/
/*插入成功返回1，插入失败返回0*/
{
int j;
if(L->size >= MaxSize)
{
printf("顺序表已满无法插入！\n");
return 0;
}
else if(i < 0 || i > L->size)
{
printf("参数i不合法！\n");
return 0;
}
else
{  //此段程序有错误
for(j = L->size; j > i; j--) L->list[j] = L->list[j - 1];/*为插入做准备*/
L->list[i] = X; /*插入*/     
L->size ++;  /*元素个数加1*/
return 1;
}
}

int ListDelete(SeqList *L, int i, DataType *X)
/*删除顺序表L中的位置i(0 <= i <= size - 1)的数据元素值并存放到参数X中*/
/*删除成功返回1，删除失败返回0*/
{
int j;
if(L->size <= 0)
{
printf("顺序表已空无数据元素可删！\n");
return 0;
}
else if(i < 0 || i > L->size - 1)
{
printf("参数i不合法");
return 0;
}
else
{//此段程序有错误
*X = L->list[i];/*保存删除的元素到X中*/     
for(j = i + 1; j <= L->size - 1; j++) L->list[j - 1] = L->list[j]; /*依次前移*/
L->size--; /*数据元素个数减1*/
return 1;
}
}

int ListGet(SeqList L, int i, DataType *X)
/*取顺序表L中弟i个数据的值存于X中，成功返回1，失败返回0*/
{
if(i < 0 || i > L.size - 1)
{
printf("参数i不合法！\n");
return 0;
}
else
{
*X = L.list[i];
return 1;
}
}

int ListSearch(SeqList L, DataType x){
	int i;
	for(i = 0; i < L.size; i++){
	if(L.list[i] == x){
		return i;
        }
	}
	return -1;

}


int main(int argc,char * argv[])
{	SeqList myList;
	int i, X;
    int index1,index2;
	ListInitiate(&myList);
	for(i = 0; i < 10; i++)
		ListInsert(&myList, i, i+1);
	ListDelete(&myList, 4, &X);
	for(i = 0; i < ListLength(myList); i++){
		ListGet(myList,i,&X);
		printf("%d",X);
	    }
	index1 = ListSearch(myList , 9);
	index2 = ListSearch(myList , 11);
	printf("\n9的索引值为%d,\n11的索引值为%d",index1,index2);

	return 0;
	
}